package cn.ty.znsz.user;

import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;
import com.jfinal.validate.Validator;

import cn.ty.znsz.Login.LoginService;

/**
 * 注册验证参数
 */
public class UserValidator extends Validator{
	
	@Inject
	LoginService ls;
	
	protected void validate(Controller c) {
		setShortCircuit(true);
		setRet(Ret.fail());		// Ret.fail() 将设置 state : "fail" 值
		
		validateString("userName", 1, 19, "msg", "用户名不能超过19个字");
		//正则验证密码(包含字母，数字和特殊字符，且长度在8位以上)
		String reg="^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$";
		validateRegex("password", reg, false,"msg", "密码应包含字母，数字和特殊字符，且长度在8位以上");
		//验证两个密码是否相等
		validateEqualField("password", "repassword", "msg", "两次输入密码不一致");
		//验证区划是否多选
		if(c.getPara("areaId").indexOf(",")!= -1) {
			addError("msg", "区划只能选择一个");
		}
		//验证角色是否选择
		if("".equals(c.getPara("roleIds")) || c.getPara("roleIds") == null) {
			addError("msg", "角色请至少选择一个选项");
		}
		//验证账号是否已经被注册
		if(ls.checkLoginName(c.getPara("loginName"))) {
			addError("msg", "账号已被注册");
		};
	}

	@Override
	protected void handleError(Controller c) {
		// getRet() 与 setRet(...) 配合使用
		Ret ret = getRet();
		c.renderJson(ret);		
	}
}
